#ifndef STRING_H
#define STRING_H

#include "stdint.h"

uint8_t * malloc(const size_t count);
uint8_t * realloc(uint8_t * ptr, size_t count);
void free(void * bleh);

const void * (*memclr)(const void * const, const size_t);
const void * memclr_sse2(const void * const, const size_t);
const void * memclr_std(const void * const, const size_t);

int (*memcmp)(const uint8_t * const, const uint8_t * const, const size_t);
int memcmp_sse4_1(const uint8_t * const, const uint8_t * const, const size_t);
int memcmp_std(const uint8_t * const, const uint8_t * const, const size_t);
const void * (*memcpy)(const void * const, const void * const, const size_t);
const void * memcpy_sse2(const void * const, const void * const, const size_t);
const void * memcpy_std(const void * const, const void * const, const size_t);

const void * memmove(const void * const dst, const void * const src, const size_t count);

void * memchr(const void * cs, const int c, const size_t n);

void memset(const void * const, const uint8_t, const size_t);

size_t strlen(const char * const);
char * strtok(const char * const s, const char * const ct);
char * strcpy(const char * const s, const char * const ct);
char * strncpy(const char * const s, const char * const ct, const size_t n);

/* quick-test variables for SSE availabailities */
static const size_t SSE_XMM_SIZE = 128/8;

#endif
